// RAP [bm]: not needed without DnD support ///******************************************************************************* // * Copyright (c) 2004, 2006 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // *******************************************************************************/ //package org.eclipse.ui.presentations; // //import org.eclipse.jface.util.Geometry; //import org.eclipse.swt.SWT; //import org.eclipse.swt.graphics.Point; //import org.eclipse.swt.widgets.Control; //import org.eclipse.swt.widgets.Event; //import org.eclipse.swt.widgets.Listener; //import org.eclipse.ui.internal.dnd.DragUtil; // ///** // * Contains various utility methods for Presentation authors // * // * @since 3.0 // */ //public class PresentationUtil { // private static Point anchor; // // private final static int HYSTERESIS = 16; // // private static int initialMouseButton = 0; // // private final static String LISTENER_ID = PresentationUtil.class.getName() // + ".dragListener"; //$NON-NLS-1$ // // private static Event dragEvent; // // private static Listener currentListener = null; // // private static Control dragSource; // // private static Listener dragListener = new Listener() { // public void handleEvent(Event event) { // dragEvent = event; // if (dragSource != event.widget) { // dragSource = null; // currentListener = null; // } // } // }; // // /** // * Returns whether the mouse has moved enough to warrant // * opening a tracker. // */ // private static boolean hasMovedEnough(Event event) { // return Geometry.distanceSquared(DragUtil.getEventLoc(event), anchor) >= HYSTERESIS // * HYSTERESIS; // } // // private static Listener moveListener = new Listener() { // public void handleEvent(Event event) { // handleMouseMove(event); // } // }; // // private static Listener clickListener = new Listener() { // public void handleEvent(Event e) { // handleMouseClick(e); // } // }; // // private static Listener mouseDownListener = new Listener() { // public void handleEvent(Event event) { // if (event.widget instanceof Control) { // // Remember the button that started the drag so we // // can forward it on the call to the 'externalDragListener' // initialMouseButton = event.button; // // dragSource = (Control) event.widget; // currentListener = (Listener) dragSource.getData(LISTENER_ID); // anchor = DragUtil.getEventLoc(event); // // if (dragEvent != null && (dragEvent.widget != dragSource)) { // dragEvent = null; // } // } // } // }; // // private static void handleMouseClick(Event event) { // cancelDrag(); // } // // private static void handleMouseMove(Event e) { // if (currentListener != null && dragEvent != null && hasMovedEnough(e)) { // if (dragSource != null && !dragSource.isDisposed() // && dragSource == e.widget) { // Event de = dragEvent; // // // cache the current value so we can restore it later // int originalMouseButton = de.button; // // // Update the button field so that the drag listener // // can detect whether or not it's a 'right button' drag // de.button = initialMouseButton; // // Listener l = currentListener; // cancelDrag(); // l.handleEvent(de); // // // Restore the event's state so that other listeners see // // the original values // de.button = originalMouseButton; // } else { // cancelDrag(); // } // } // } // // private static void cancelDrag() { // currentListener = null; // dragEvent = null; // dragSource = null; // // initialMouseButton = 0; // } // // /** // * Adds a drag listener to the given control. The behavior is very similar // * to control.addListener(SWT.DragDetect, dragListener), however the listener // * attached by this method is less sensitive. The drag event is only fired // * once the user moves the cursor more than HYSTERESIS pixels. // * <p> // * This is useful for registering a listener that will trigger an editor or // * view drag, since an overly sensitive drag listener can cause users to accidentally // * drag views when trying to select a tab.</p> // * <p> // * Currently, only one such drag listener can be registered at a time. </p> // * // * @param control the control containing the drag listener // * @param externalDragListener the drag listener to attach // */ // public static void addDragListener(Control control, // Listener externalDragListener) { // control.addListener(SWT.DragDetect, dragListener); // control.addListener(SWT.MouseUp, clickListener); // control.addListener(SWT.MouseDoubleClick, clickListener); // control.addListener(SWT.MouseDown, mouseDownListener); // control.addListener(SWT.MouseMove, moveListener); // control.setData(LISTENER_ID, externalDragListener); // } // // /** // * Removes a drag listener that was previously attached using addDragListener // * // * @param control the control containing the drag listener // * @param externalDragListener the drag listener to remove // */ // public static void removeDragListener(Control control, // Listener externalDragListener) { // control.removeListener(SWT.DragDetect, dragListener); // control.removeListener(SWT.MouseUp, clickListener); // control.removeListener(SWT.MouseDoubleClick, clickListener); // control.removeListener(SWT.MouseDown, mouseDownListener); // control.removeListener(SWT.MouseMove, moveListener); // control.setData(LISTENER_ID, null); // if (externalDragListener == currentListener) { // cancelDrag(); // } // } // //}